Typically, developers write software applications to allow for many degrees of freedom in their configuration. By way of example, these developers are able to leverage these degrees of freedoms by establishing a software application that operates within specific constrains of a particular platform that is provided to support the software application. Thus, these freedoms associated with the software application enable the software application to operate in cooperation with the platform.
In one instance, this configuration of software application may be employed by application-service providers (ASPs) who develop the software application to operate on a platform that is remotely accessible via the Internet. In this instance, the platform executes the software program in such a way that users may remotely manipulate files using the software application. Accordingly, the platform is adapted to establish underlying elements of the software application running thereon to accommodate a current load of the remote usage. The degrees of freedom in the software application allow for scaling up or down these underlying elements and for managing the coordination therebetween. However, because the platform includes hardware components, it is susceptible to the introduction of failures and the implementation of updates. These situations may cause one or more of the underlying elements to fall offline and, consequently, may disrupt the operation of the software application. In one instance of a disruption, the software application may not fulfill the load applied by the remote users, while in another instance, the entire software application may crash.
Current solutions to prevent the disruption of the software application rely on curators of the platform manually installing the underlying elements according to the load, failures, and updates. These ad hoc solutions are labor-intensive and error-prone. Further, these current solutions are nonpreventative and require a failure to occur prior to taking action. These shortcomings of manual involvement are exaggerated when a the platform is expansive in size, comprising a multitude of interconnected hardware components, that support the operation of a multitude of software applications.